
//
//  NKNewFeatureView.m
//  NewKY
//
//  Created by 徐腾 on 2016/11/16.
//  Copyright © 2016年 Dee. All rights reserved.
//

#import "NKNewFeatureView.h"

@interface NKNewFeatureView () <UIScrollViewDelegate>

@property (weak,nonatomic)UIScrollView *scrollView;

@property (weak,nonatomic)UIPageControl *pageCtrl;

/** 媒体播放器 */
@property (strong, nonatomic) NSMutableArray <AVPlayer *>*playerArr;

@end


@implementation NKNewFeatureView
//重写这个视图的构造方法,在构造方法里调用创建UIScrollView和其他控件的方法
-(instancetype)initWithFrame:(CGRect)frame{
    
    if (self = [super initWithFrame:frame]) {
        
        //调用setupUI
        [self setupUI];
    }
    
    return self;
}


- (void)setupUI{
    
    //创建scrollView
    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.bounds];
    
    //添加到父容器
    [self addSubview:scrollView];
    
    //禁用弹簧效果
    scrollView.bounces = NO;
    
    //禁用滚动条
    scrollView.showsVerticalScrollIndicator = NO;
    scrollView.showsHorizontalScrollIndicator = NO;
    
    //开启分页效果
    scrollView.pagingEnabled = YES;
    
    //设置当前视图成为scrollView的代理
    scrollView.delegate = self;
    
    //记录变量
    self.scrollView = scrollView;
    
    //----创建UIPageControl
    UIPageControl *pgCtrl = [[UIPageControl alloc] init];
    //>设置属性（总页数）
    //设置当前所在页
    pgCtrl.currentPage = 0;
    
    //设置默认颜色
    pgCtrl.pageIndicatorTintColor = [UIColor darkGrayColor];
    //设置当前页颜色
    pgCtrl.currentPageIndicatorTintColor = [UIColor whiteColor];
    
    //> 添加到新特性界面
    [self addSubview:pgCtrl];
    
    //> 禁用用户交互
    pgCtrl.userInteractionEnabled = NO;
    
    //> 设置约束（UIPageControl可以根据它自身的内容算出宽度和高度，我们只要给位置）
    [pgCtrl mas_makeConstraints:^(MASConstraintMaker *make) {
        
        make.centerX.equalTo(self);
        make.bottom.equalTo(self).offset(-80);
    }];
    //属性记录pageControl
    self.pageCtrl = pgCtrl;
    
}

#pragma mark - 重写数据setter方法
-(void)setPlayerUrls:(NSArray *)playerUrls{
    
    //一定要保存
    _playerUrls = playerUrls;
    
    self.playerArr = [NSMutableArray arrayWithCapacity:_playerUrls.count];
    
    //-------把数据展示到界面上
    
    //准备一个初始frame
    CGRect rect = self.scrollView.bounds;
    
    //取出宽度
    CGFloat width = rect.size.width;
    
    //有多少个数据就循环创建多少个View
    for (int i = 0; i < _playerUrls.count; i++) {
        
        //-----创建View
        UIView *view = [[UIView alloc] init];
        //设置view的填充模式
        view.contentMode = UIViewContentModeScaleAspectFill;
        //> 设置frame
        view.frame = CGRectOffset(rect, i * width , 0);
    
        // AVPLayer是进行媒体文件播放的关键类
        AVPlayer *player = [AVPlayer playerWithURL:_playerUrls[i]];
        //将播放器添加到播放器数组
        [self.playerArr addObject:player];
        // `AVPlayerLayer`会将`AVPlayer`的内容显示到它的图层上
        AVPlayerLayer *layer = [AVPlayerLayer playerLayerWithPlayer:player];
        
        // 设置layer的frame
        [layer setFrame:view.bounds];
        // 将播放器的layer添加到view的layer上,让view播放
        [view.layer addSublayer:layer];
        //视频内容的拉伸
        layer.videoGravity = AVLayerVideoGravityResizeAspectFill;
        
        //将view添加到scrollView上
        [self.scrollView addSubview:view];
        
        //让视图已加载就让第一个动画播放
        if (i==0) {
            [player play];
        }
      
    }

    //设置scrollView的contentSize 为了在最后一页时还能继续往左滚，所以再加一个页面的滚动宽度
    self.scrollView.contentSize = CGSizeMake((_playerUrls.count+1) * width, 0);
    
    //设置分页指示器的总页数
    self.pageCtrl.numberOfPages = _playerUrls.count;
}



#pragma mark - scrollView的代理方法

/**
 *  当scrollView正在滚动时触发
 */
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
    
    //通过此方式可以根据偏移值算出它滚动到第几页了，然后把页码设置给分页指示器(为了让滚动一半以后也能让分页指示器显示下一页，因此我们需要+0.5(相当于四舍五入))
    int page = (scrollView.contentOffset.x / scrollView.bounds.size.width ) + 0.5;
 
    self.pageCtrl.currentPage = page;
    
    //隐藏分页指示器
    self.pageCtrl.hidden = page == self.pageCtrl.numberOfPages;
    
}

/**
 *  滚动完成事件
 */
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
    
    //    NSLog(@"%lf",scrollView.contentOffset.x);
    
    //获得当前已经滚出去的页数
    int page = scrollView.contentOffset.x / scrollView.bounds.size.width;
    
    //如果是滚出去图片数量页，那么就移除当前的新特性界面
    if (page == self.playerUrls.count) {
        
        [self removeFromSuperview];
    }
    
    //滚动到下一个界面就让下一个视频播放
    //防止角标越界
    if (page < 4) {
        [self.playerArr[page] play];
    }
    
}



@end
